package rohyunji;



public class J21_AccessModifier {

	/*
	  캡슐화 encapsulation 
	  객체의 일부를 보호하고 노출해도 상관없는 부분을 노출 했을때는 안전하게 해야한다는 매커니즘(주된목적)
	 
	 예를 들어 텔레비전은 캡슐화의 좋은 예이다. 수많은 부품들을 케이스안에 넣어둠
	 클래스 개발자는 변수와 메서드들을 외부로부터 감추어 두는것이 좋다.
	 
	 접근제어를 통해 캡슐화를 지원함  
	 4가지 접근 제어 수정자(클래스,맴버변수,메소드에 적용가능)
	 private -자신만접근 가능
	 protected -자신과 상속관계의 클래스만 접근가능
	 public  -누구나 접근가능
	 default -기본패키지 내에서만 접근가능 
	  
	 클래스에 적용 public , default 만 사용가능 
	 멤버변수 적용 public protected,private,default
	 메서드에 적용 public,protected,private,default
	 
	 OOP 캡슐화 원칙에 따라 클래스 멤버 변수들은 무조건 private 선언
	 클래스의 메서드들은 오픈이 목적이라면 public으로 선언  그외 경우에는 
	 protected로선언
	 상속받는 클래스 외에 모두 private,protected클래스
	 생성자는 꼭 public 
	 그러나 private 로 설정해서 객체화 못하게함 
	  
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
	
		J21_PublicClass pbc1=new J21_PublicClass();
		J_exercise.J21_PublicClass pbc2=new J_exercise.J21_PublicClass();
		//같은 Public 클래스 는 다른패키지라도 가져올수 있다.
		//default 패키지 안에 있는건 외부로 갖고올수가없다.
		
		
		
		//클래스 멤버변수에게 접근
		//pb1은 같은 패키지내 클래스 멤버 변수 접근 
		
		pbc1.defautval=1;
		pbc1.publicval=2;
		pbc1.publicmethod();
	
	
		
		//pbc2 다른패키지 내 클래스의 맴버변수 접근
		pbc2.publicval=4;
		pbc2.publicmethod();
		
	}

}
